package com.bdult.vh.common; 

import java.io.CharArrayReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Hashtable;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.regex.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UtilBean {
  /**
   * 디렉토리 크기반환
   * since 2009. 4. 3.
   * @param file
   * @return 
   */
  public static synchronized long getFolderSize(File file) {
    long tempNum = 0;
    for(int i=0; i<file.listFiles().length; i++) {
      if(file.listFiles()[i].isDirectory()) {
        tempNum = tempNum + getFolderSize(file.listFiles()[i]);
      }
      if(file.listFiles()[i].isFile()) {
        tempNum = tempNum + file.listFiles()[i].length();
      }
    }
    return tempNum;
  }
  
  /**
   * 디렉토리삭제
   * since 2009. 4. 3.
   * @param file 디렉토리명
   */
  public static synchronized void deleteFolder(File file) {    
    for(int i=0; i<file.listFiles().length; i++) {
      if(file.listFiles()[0].isDirectory()) {
        deleteFolder(file.listFiles()[0]);
      } else {
        file.listFiles()[0].delete();
      }
    }
    file.delete();
    if(file.exists()) deleteFolder(file);
  }
  
  /**
   * 문자열의 일부내용을 변경
   * @param 문자열 string
   * @param 문자열 기존string
   * @param 문자열 변경될string
   * @return String
   */
    public static synchronized String replace(String src, String oldstr, String newstr)
    {
        if (src == null)
            return null;
    
        StringBuffer dest = new StringBuffer("");
        int  len = oldstr.length();
        int  srclen = src.length();
        int  pos = 0;
        int  oldpos = 0;
        
        if ( src.length() > 0 && oldstr.length() > 0 ) {
	        while ((pos = src.indexOf(oldstr, oldpos)) >= 0) {
	            dest.append(src.substring(oldpos, pos));
	            dest.append(newstr);
	            oldpos = pos + len;
	        }
        }        
        
        if (oldpos < srclen)
            dest.append(src.substring(oldpos, srclen));
        
        return dest.toString();
    }

    /**
     * 
     * @param 문자열 string
     * @param 문자열 기존string
     * @param 문자열 변경될string
     * @param 바꿀수
     * @return String
     */
      public static synchronized String replace(String src, String oldstr, String newstr, int nSize)
      {
          if (src == null)
              return null;
      
          StringBuffer dest = new StringBuffer("");
          int  len = oldstr.length();
          int  srclen = src.length();
          int  pos = 0;
          int  oldpos = 0;
          int  n = 0;

          if ( src.length() > 0 && oldstr.length() > 0 ) {
	          while ((pos = src.indexOf(oldstr, oldpos)) >= 0 && n < nSize) {
	              dest.append(src.substring(oldpos, pos));
	              dest.append(newstr);
	              oldpos = pos + len;
	              n++;
	          }
          }
          
          if (oldpos < srclen)
              dest.append(src.substring(oldpos, srclen));
          
          return dest.toString();
      }


    /**
     * 문자열 앞에 원하는 갯수만큼 0을 추가
     * @param 문자열 앞에 붙이고 싶은 0의 갯수
     * @param 0을 추가할 대상문자
     * @return String
     */
    public static synchronized String addZeroFrontOfString(int s, String str)  //문자 앞에 자리수 만큼 "0"붙이기
    {
        //StringBuffer dest = new StringBuffer("");
        if(str==null) return "";
        int  len = str.length();
        
        String zeroString = "";
        if (len<s){
            for(int i=0;i<(s-len);i++){
                zeroString += "0"; 
            }
        }
        str = zeroString + str;
        
        return str;
    }
    
  /**
   * 현재 시각을 yyyy-MM-dd HH:mm:ss 상태로 가져옴
   * @return String 현재시각
   */
  public static synchronized String getTodayDateFormat(){
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  }


  /**
   * 원하는 양식으로 원하는 시각을 가져옴
   * @param format 시각 출력양식 ex)yyyy mm dd hh:mm:ss
   * @param date
   * @return String 시각
   */
  public static synchronized String getTodayDateFormat(String format, Date date){
    return new SimpleDateFormat(format).format(date);
  }

  /**
   * 원하는 양식으로 현재시각을 가져옴
   * @param format 현재시각 출력양식 ex)yyyy mm dd hh:mm:ss
   * @param date
   * @return String 현재시각
   */
  public static synchronized String getTodayDateFormat(String format){
    return new SimpleDateFormat(format).format(new Date());
  }

  /**
   * 요일 출력하기
   *
   * @param  java.util.Date  날자
   * @return String  요일 문자열
   */
  public static String getWeekDayString(Date date) {
    String[] dayOfWeek={"일","월","화","수","목","금","토"};
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return dayOfWeek[c.get(Calendar.DAY_OF_WEEK)-1];

  }
  /**
   * 요일 출력하기
   *
   * @param  String  날자 문자열 (2008.09.17 / 2008-09-17 과 같은 10자리 문자열)
   * @return String  요일 문자열
   */
  public static String getWeekDayString(String str) {
    if (str.length()<10) {
      return "";
    }

    String[] dayOfWeek={"일","월","화","수","목","금","토"};
    Calendar c = Calendar.getInstance();
    c.set(convertToInt(str.substring(0,4)), convertToInt(str.substring(5,7)), convertToInt(str.substring(8,10)));

    return dayOfWeek[c.get(Calendar.DAY_OF_WEEK)-1];
  }
  /**
   * 요일 출력하기
   *
   * @param  String  날자 문자열 (2008.09.17 / 2008-09-17 과 같은 10자리 문자열)
   * @return String  요일 문자열
   */
  public static String getWeekDayString2(String inputStr) {
    String sReturn = "";
    try {
      if (inputStr.length()<10) {
        return "";
      }
      String[] dayOfWeek={"월","화","수","목","금","토","일"};
      Calendar c = Calendar.getInstance();
      SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      inputStr = UtilBean.substringCheckNull(inputStr, 0, 10);
      c.setTime(d.parse(inputStr+" 00:00:00"));
      int nR = c.get(Calendar.DAY_OF_WEEK);
      sReturn = checkNullString(c.get(Calendar.DAY_OF_WEEK));
      if ( nR == 1 ) {
        nR = 6;
      } else {
        nR = nR - 2; 
      }
      sReturn = dayOfWeek[nR];
    } catch ( Exception e ) {
    }  finally {
    }
    return sReturn;
  }

  /**
   * 요일 반환
   *
   * @param  String  날자 문자열 (2008.09.17 / 2008-09-17 과 같은 10자리 문자열)
   * @return String  요일 문자열
   */
  public static String getWeekDayStringValue(String inputStr) {
    String sReturn = "";
    try {
      if (inputStr.length()<10) {
        return "";
      }
      Calendar c = Calendar.getInstance();
      SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      inputStr = UtilBean.substringCheckNull(inputStr, 0, 10);
      c.setTime(d.parse(inputStr+" 00:00:00"));
      int nR = c.get(Calendar.DAY_OF_WEEK);
      sReturn = checkNullString(nR); 
      /*
      Calendar cal= Calendar.getInstance ( );
      cal.set(convertToInt(inputStr.substring(0,4)), convertToInt(inputStr.substring(5,7)), convertToInt(inputStr.substring(8,10)));
      sReturn = checkNullString(cal.get(Calendar.DAY_OF_WEEK)); 
       */

    } catch ( Exception e ) {
    }  finally {
    }
    return sReturn;
  }
  /**
   * 요일 반환
   *
   * @param  String  날자 문자열 (2008.09.17 / 2008-09-17 과 같은 10자리 문자열)
   * @return String  요일 문자열
   */
  public static String getWeekDayStringValue2(String inputStr) {
    String sReturn = "";
    try {
      if (inputStr.length()<10) {
        return "";
      }
      Calendar c = Calendar.getInstance();
      SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      inputStr = UtilBean.substringCheckNull(inputStr, 0, 10);
      c.setTime(d.parse(inputStr+" 00:00:00"));
      sReturn = checkNullString(c.get(Calendar.DAY_OF_WEEK));
      if ( convertToInt(sReturn) == 1 ) {
        sReturn = "7";
      } else {
        sReturn = checkNullString(convertToInt(sReturn) - 1); 
      }
    } catch ( Exception e ) {
    }  finally {
    }
    return sReturn;
  }

  /**  두 날짜 사이의 차이
  *
  *  @param startDate 시작 날짜
  *  @param endDate   종료 날짜
  *  @param format    날짜 형식
  *  @return long     날짜 차이
  */
   public static long day2Day( String startDate, 
                               String endDate, 
                               String format    ) throws Exception{
       if (format == null) 
           format = "yyyy/MM/dd HH:mm:ss.SSS";
       SimpleDateFormat sdf = new SimpleDateFormat(format);
       Date sDate;
       Date eDate;
       long day2day = 0;
       try {
           sDate = sdf.parse(startDate);
           eDate = sdf.parse(endDate);
           day2day = (eDate.getTime() - sDate.getTime()) / (1000*60*60*24);
       } catch(Exception e) {
           throw new Exception("wrong format string");
       }

       return day2day;
   }
   public static long day2DayReturnTime( String startDate, 
     String endDate, 
     String format    ) throws Exception{
     if (format == null) 
       format = "yyyy/MM/dd HH:mm:ss.SSS";
     SimpleDateFormat sdf = new SimpleDateFormat(format);
     Date sDate;
     Date eDate;
     long day2day = 0;
     try {
       sDate = sdf.parse(startDate);
       eDate = sdf.parse(endDate);
       day2day = eDate.getTime() - sDate.getTime() ;
     } catch(Exception e) {
       throw new Exception("wrong format string");
     }
     
     return day2day;
   }
  
  /**
   * 문자열을 입력한 길이만큼 자른후   ...추가
   * since 2009. 4. 3.
   * @param src 원본문자열
   * @param length 필요한길이
   * @return String
   */
  public static String cutString(String str, int limit) {
    return cutString(str, limit, true);
  }
  
  /**
   * 문자열을 입력한 길이만큼 자른후   ...추가
   * since 2009. 4. 3.
   * @param obj 원본문자열
   * @param length 필요한길이
   * @return String
   */
  public static String cutString(Object obj, int limit) {
    return cutString(checkNullString(obj), limit, true);
  }  
    
    
    
  /**
   * 문자열을 입력한 길이만큼 자른후   ...추가
   * since 2009. 4. 3.
   * @param obj 원본문자열
   * @param length 필요한길이
   * @return String
   */    
  public static String cutString(Object obj, int limit, boolean isDot) {
    return cutString(checkNullString(obj), limit, isDot);
  }
  
  /**
   * 
   * since 2009. 4. 3.
   * @param str
   * @param limit
   * @param isDot
   * @return
   */
  public static String cutString(String str, int limit, boolean isDot) {
    str = replace(str, "&quot;", "\"");
    
    limit = limit * 2;
    if (str == null || limit < 4) return str;
  
    int len = str.length();
    int cnt=0, index=0;

    while (index < len && cnt < limit) {
      if (str.charAt(index++) < 256) // 1바이트 문자라면...
        cnt++;     // 길이 1 증가
      else {  // 2바이트 문자라면...    
        if(cnt < limit-1) {
          cnt += 2;  // 길이 2 증가
        } else {
          index--;
          break;
        }  // 여기까지 해당 바이트 초과시 버림.
      }
    }
    if (index < len) {
      if(isDot){
        str = str.substring(0, index) + " ...";
      } else {
        str = str.substring(0, index);
      }
    }
    str = replace(str, "\"", "&quot");
    return str;
  }
  
  /**
   * 문자열을  enc 형식으로 인코딩
   * since 2009. 4. 3.
   * @param src 원본문자열
   * @param enc 인코딩타입
   * @return String
   */
  public static synchronized String encodeURL(String src, String enc){
    if (src != null) {
      try{
        src = URLEncoder.encode(src, enc);
      }catch(UnsupportedEncodingException e){
        System.out.println(e.getMessage());
      }
    }
    return src;
  }
  
  /**
   * 문자열을  enc 형식으로 디코딩
   * since 2009. 4. 3.
   * @param src 원본문자열
   * @param enc 인코딩타입
   * @return String
   */
  public static synchronized String decodeURL(String src, String enc){
    if(src != null){
      try{
        src = URLDecoder.decode(src, enc);
      }catch(UnsupportedEncodingException e){
        System.out.println(e.getMessage());
      }
    }
    return src;
  }
  
  /**
   * 파일복사
   * since 2009. 4. 3.
   * @param s 원본파일물리경로
   * @param t 대상파일물리경로
   * @return
   */
  public static boolean copyFile(String s, String t) {
    File f1 = new File(s);
    boolean isResult = true;
    
    FileInputStream fin = null;
    FileOutputStream fout = null;
    try {
      if( f1.exists() ){
        fin = new FileInputStream(s);
        fout = new FileOutputStream(t);
        byte buffer[] = new byte[1024];
        int j;
        while((j = fin.read(buffer)) >= 0)
        fout.write(buffer, 0, j);
        
        fout.close();
        fin.close();
      } else isResult = false;
    } catch(IOException e){
      isResult = false;      
      try {
        if ( fout != null ) fout.close();
      } catch (IOException e1) {        
        e1.printStackTrace();
      }
      try {
        if ( fin != null ) fin.close();
      } catch (IOException e1) {
        e1.printStackTrace();
      }
      e.printStackTrace();
      System.out.println(e.getMessage());
    }
    
    return isResult;
  }
  
  /**
   * 폴더복사
   * since 2009. 6. 19.
   * @param s 원본폴더물리경로
   * @param t 대상폴더물리경로
   * @return
   */
  public static int copyFolder(String s, String t) {
    boolean isResult = false;
    File f1 = new File(s);
    File fList [] = f1.listFiles();
    int nSuccessCount = 0;
    try {      
      for ( int i = 0; i<fList.length; i++ ) {
        /* 폴더일 경우 폴더내 검색*/
        if ( fList[i].isDirectory() ) {
          File target = new File(t + File.separator + fList[i].getName());
          if ( !target.exists() ) {
            target.mkdirs();
          }
          nSuccessCount += copyFolder(s + File.separator + fList[i].getName(), t + File.separator + fList[i].getName());
        /* 파일일 경우 파일 복사*/
        } else if ( fList[i].isFile() ) {
          isResult = copyFile(s + File.separator + fList[i].getName(), t + File.separator + fList[i].getName());          
          if(isResult){
            nSuccessCount++;
          }
        }        
      }      
    } catch(Exception e){
      e.printStackTrace();
      System.out.println(e.getMessage());
    }
    
    return nSuccessCount;
  }
  
  /**
   * 오라클의 CLOB 데이터 String으로 읽어옴
   * since 2009. 4. 3.
   * @param instream
   * @return
   */
  public static String getClobData(Reader instream) {
    if(instream == null) return "";
    StringBuffer buffer = new StringBuffer();
    char[] buf = new char[1024];
    int length = 0;
    String content = "";
    try{
      if(instream!=null){
          while ((length = instream.read(buf)) != -1) {
              buffer.append(buf,0,length);
          }
          instream.close();
      }
      if(buffer.length()>0){
          content = buffer.toString();
      }else{
          content = "";
      }
    }catch(Exception e){
      System.out.println(e.getMessage());
      e.printStackTrace();
    }
    return content;
  }
  
  /**
   * 숫자를  금액형식으로 반환
   * since 2009. 4. 3.
   * @param amount 금액(long)
   * @return String
   */
  public String getAmountToKorean(long amount) {
    String sRtn = "";
    String tmp_amount = "" + amount;
    int i, j, iLen = tmp_amount.length();
    
    j = 0;
    for(i=iLen; i>0; i--) {
      if(!tmp_amount.substring(j, j+1).equals("0")) {
        sRtn += getKoreanFromNumber(Integer.parseInt(tmp_amount.substring(j, j+1)));
        sRtn += getUnit(i, false);
      } else {
        sRtn += getUnit(i, true);
      }
      
      j++;
    }
    
    if(!sRtn.equals(""))  sRtn = "일금 " + sRtn + "원정";
    
    return sRtn;
  }
  
  /**
   * getAmount2Hangul 함수내부에 사용되는  자릿수지정함수
   * since 2009. 4. 3.
   * @param iLocal 자릿수
   * @param isZero 
   * @return
   */
  private static String getUnit(int iLocal, boolean isZero) {
    String sLocal[] = {"", "십", "백", "천"};
    String sUnit[] = {"만", "억", "조", "경"};
    String sRtn = "";

    int idx = iLocal-1;

    if(iLocal <= 20 && !isZero){
      sRtn = sLocal[idx%4];
    }
    if(idx > 0 && (idx % 4) == 0){
      sRtn += sUnit[(int)idx/4-1];
    }

    return sRtn;
  }
  
  /**
   * 숫자변환함수
   * since 2009. 4. 3.
   * @param iNumber
   * @return
   */
  private static String getKoreanFromNumber(int iNumber) {
    String sNumber[] = {"일", "이", "삼", "사", "오", "육", "칠", "팔", "구"};
    String sRtn = "";

    if(iNumber > 0 && iNumber < 10)  sRtn = sNumber[iNumber-1];

    return sRtn;
  }
  
  /**
   * 내용중 HTML 특수기호인 문자를 HTML 특수기호 형식으로 변환합니다.
   * @param htmlstr 바꿀 대상인 문자열
   * @return String
   */
  public static String convertHtmlChars(String htmlstr)
  {
    String convert = new String();
    convert = replace(htmlstr, "<", "&lt;");
    convert = replace(convert, ">", "&gt;");
    convert = replace(convert, "\"", "&quot;");
    convert = replace(convert, "\\'", "'");
    convert = replace(convert, "&nbsp;", "&amp;nbsp;");
    return convert;
  }
  
  /**
   * 내용중 HTML 특수기호인 문자를 HTML 특수기호 형식으로 변환합니다.
   * @param htmlstr 바꿀 대상인 문자열
   * @return String
   */
  public static String convertHtmlCharsReverse(String htmlstr)
  {
    String convert = new String();
    convert = replace(htmlstr, "&lt;", "<");
    convert = replace(convert, "&gt;", ">");
    convert = replace(convert, "&quot;", "\"");
    convert = replace(convert, "'", "\\'");
    convert = replace(convert, "&amp;nbsp;", "&nbsp;");
    convert = replace(convert, "\r\n", "<br />");
    return convert;
  }
  

  /**
   * 내용입력시 컨텐츠에 입력된 특수문자처리 
   * 날   짜:  2009. 2. 1 
   * 작성자: 채영재
   * 내   용: Html 특수기호 편집
   */
  public static String convertSpecificChar(String htmlstr)
  {
    String convert = new String();
    convert = replace(htmlstr,"•","&#149;");
    convert = replace(convert,"∙","&#183;");
    convert = replace(convert,"ü","&#252;");
    convert = replace(convert,"é","&#233;");
    convert = replace(convert,"ë","&#235;");
    convert = replace(convert,"ê","&#234;");
    convert = replace(convert,"ï","&#239;");
    return convert;
  }

  /**
   * 파라메터의 < 와 /> 를 제거  
   * since 2009. 4. 7.
   * @param content html사용하지않을 문자열
   * @return
   */
  public static String eraseHtmlTag(String content)
  {
  //  String str = param.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "");
  //  return str;
       final int NORMAL_STATE = 0;
        final int TAG_STATE = 1;
        final int START_TAG_STATE = 2;
        final int END_TAG_STATE = 3;
        final int SINGLE_QUOT_STATE = 4;
        final int DOUBLE_QUOT_STATE = 5;
        int state = NORMAL_STATE;
        int oldState = NORMAL_STATE;
        char[] chars = content.toCharArray();
        StringBuffer sb = new StringBuffer();
        String sReturn = "";
        boolean bSlash = false;
        char a;
        for (int i = 0; i < chars.length; i++) {
            a = chars[i];
            switch (state) {
                case NORMAL_STATE:
                    if (a == '<')
                        state = TAG_STATE;
                    else
                        sb.append(a);
                    break;
                case TAG_STATE:
                    if (a == '>')
                        state = NORMAL_STATE;
                    else if (a == '\"') {
                        oldState = state;
                        state = DOUBLE_QUOT_STATE;
                    }
                    else if (a == '\'') {
                        oldState = state;
                        state = SINGLE_QUOT_STATE;
                    }
                    else if (a == '/')
                        state = END_TAG_STATE;
                    else if (a != ' ' && a != '\t' && a != '\n' && a != '\r' && a != '\f')
                        state = START_TAG_STATE;
                    break;
                case START_TAG_STATE:
                case END_TAG_STATE:
                    if (a == '>')
                        state = NORMAL_STATE;
                    else if (a == '\"') {
                        oldState = state;
                        state = DOUBLE_QUOT_STATE;
                    }
                    else if (a == '\'') {
                        oldState = state;
                        state = SINGLE_QUOT_STATE;
                    }
                    else if (a == '\"')
                        state = DOUBLE_QUOT_STATE;
                    else if (a == '\'')
                        state = SINGLE_QUOT_STATE;
                    break;
                case DOUBLE_QUOT_STATE:
                    if (bSlash)
                        bSlash = false;
                    else if (a == '\"')
                        state = oldState;
                    else if (a == '\\')
                        bSlash = true;
                    break;
                case SINGLE_QUOT_STATE:
                    if (bSlash)
                        bSlash = false;
                    else if (a == '\'')
                        state = oldState;
                    else if (a == '\\')
                        bSlash = true;
                    break;
            }
        }
        sReturn = sb.toString();
        sReturn = UtilBean.replace(sReturn, "&nbsp;", " ");
        return sReturn;
  
  }

  /**
   * 문자열을 MD5로 인코딩
   * since 2009. 4. 7.
   * @param password 인코딩할 문자열
   * @return MD5인코딩된 문자열
   */
  public static synchronized String convertPasswordMD5(String password) {
    String newChar;
    try{

      if( ( password==null ) || ( password.length() == 0 ) ) {
        newChar = "";
      } else {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update( password.getBytes() );

        byte [] raw = md.digest();

        newChar = byteToHex(raw);

      }
      
    } catch (Exception e) {
      return "";
    }
    return newChar;
  }
  
  /**
   * byte코드를  hex코드로 변환
   * since 2009. 4. 7.
   * @param data hex코드로 변환할 byte코드 배열
   * @return String hexcode 문자열
   */
  public static synchronized String byteToHex(byte[] data) {
    StringBuffer buf = new StringBuffer();
    for ( int i = 0; i < data.length;  i++) {
      buf.append(byteToHex(data[i]).toUpperCase());
    }
    return buf.toString();
  }
  
  /**
   * byte코드를  hex코드로 변환
   * since 2009. 4. 7.
   * @param data hex코드로 변환할 byte코드
   * @return hexcode 문자
   */
  private static synchronized String byteToHex(byte data) {
    StringBuffer buf = new StringBuffer();
    buf.append(toHexChar((data >>> 4) & 0x0F));
    buf.append(toHexChar(data & 0x0F));
    return buf.toString();
  }
  
  /**
   * byteToHex함수의 내부동작
   * since 2009. 4. 7.
   * @param i
   * @return
   */
  private static synchronized char toHexChar(int i) {
    if ((i >= 0) && (i <= 9)) {
      return (char) ('0' + i);
    } else {
      return (char) ('a' + (i -10));
    }
  }
  
  /**
   * 파라메터의 int형 반환, 변환이 불가능한경우 0반환
   * since 2009. 4. 7.
   * @param argString 변환할 문자열
   * @return argString의 int형값
   */
  public static synchronized int convertToInt (String argString){
    try{
      return Integer.parseInt(checkNullStringR(argString, "0"));
    }catch(Exception e){
      return 0;
    }
  }
  
  public static synchronized int[] convertToInt (String[] argString){
    int[] strTmp;
    try{
      if(argString != null && argString.length > 0 ) {
        strTmp = new int [argString.length];
        for( int i = 0; i < argString.length; i++ ) {
          strTmp[i] = convertToInt(argString[i]);
        }
      }else{
        strTmp = null;
      }
    }catch(Exception e){
      strTmp = null;
    }
    return strTmp;
  }
  /**
   * 파라메터의 int형 반환, 변환이 불가능한경우 0반환
   * since 2009. 4. 7.
   * @param argString 변환할 문자열
   * @return argString의 int형값
   */
  public static synchronized int convertToInt (Object argString){
    try{
      return Integer.parseInt(checkNullStringR(argString, "0"));
    }catch(Exception e){
      return 0;
    }
  }

  /**
   * 파라메터의 int형 반환, 변환이 불가능한경우 0반환, null또는 빈값일경우 argReturn반환
   * since 2009. 4. 7.
   * @param argString 변환할 문자열
   * @param argReturn null또는 빈문자열일 경우 반환값
   * @return
   */
  public static synchronized int convertToIntR (String argString, int argReturn){
    try{
      return Integer.parseInt(checkNullStringR(argString, argReturn));
    }catch(Exception e){
      return 0;
    }
  }
  
  /**
   * 파라메터의 long형 반환, 변환이 불가능한경우 0반환
   * since 2009. 4. 7.
   * @param argString
   * @return int 입력된 문자열의 int형 반환
   */
  public static synchronized long convertToLong (Object argString){
    try{
      return Long.parseLong(checkNullStringR(argString, "0"));
    }catch(Exception e){
      return 0L;
    }
  }
  /**
   * 파라메터의 long형 반환, 변환이 불가능한경우 0반환
   * since 2009. 4. 7.
   * @param argString
   * @return int 입력된 문자열의 int형 반환
   */
  public static synchronized long convertToLong (String argString){
    try{
      return Long.parseLong(checkNullStringR(argString, "0"));
    }catch(Exception e){
      return 0L;
    }
  }
  
  /**
   * 문자열배열을 long 배열로 변환
   * since 2009. 4. 7.
   * @param argString long배열로 변환할 String배열
   * @return long[]
   */
  public static synchronized long[] convertToLong (String[] argString){
    long[] strTmp;
    try{
      if(argString != null && argString.length > 0 ) {
        strTmp = new long[argString.length];
        for( int i = 0; i < argString.length; i++ ) {
          strTmp[i] = convertToLong(argString[i]);
        }
      }else{
        strTmp = null;
      }
    }catch(Exception e){
      strTmp = null;
    }

    return strTmp;
  }
  
  /**
   * 파라메터의 long형 반환, 변환이 불가능한경우  long형 0 반환
   * since 2009. 4. 7.
   * @param argString
   * @param argReturn
   * @return
   */
  public static synchronized long convertToLongR (String argString, long argReturn){
    try{
      return Long.parseLong(checkNullStringR(argString, argReturn));
    }catch(Exception e){
      return 0L;
    }
  }
  
  /**
   * 파라메터의 float형 반환, 변환이 불가능한경우 0반환
   * since 2009. 4. 7.
   * @param argString
   * @return int 입력된 문자열의 float형 반환
   */
  public static synchronized Float convertToFloat (Object argString){
    try{
      return Float.parseFloat(checkNullStringR(argString, "0"));
    }catch(Exception e){
      return 0F;
    }
  }
  
  /**
   * 파라메터가  NULL, 또는 빈값일 경우 공백문자("") 반환
   * 이상없을 경우 원본문자열 반환
   * since 2009. 4. 7.
   * @param str 원본문자열
   * @return String 공백문자열 또는,  원본문자열
   */
  public static synchronized String checkNullString (String str){
    String strTmp;
    try {
      if (str!=null && str.length()>0 && !str.equals(""))
        strTmp = str.trim();
      else
        strTmp = "";
    } catch (Exception e) {
        strTmp = "";
    }
    return strTmp.trim();
  }

  
  
  public static synchronized String checkNullString (long str){
    String strTmp;
    try {
      strTmp = String.valueOf(str);
    } catch (Exception e) {
      strTmp = "";
    }
    return strTmp.trim();
  }
  
  /**
   * 파라메터가  NULL, 또는 빈값일 경우 공백문자("") 반환
   * 이상없을 경우 원본Obejct의 문자형
   * since 2009. 4. 7.
   * @param str 원본Object
   * @return String 공백문자열 또는,  원본문자열
   */
  public static synchronized String checkNullString (Object str){
    String strTmp;
    try {
      if (str!=null && str.toString().length()>0 && !str.equals(""))
        strTmp = str.toString().trim();
      else
        strTmp = "";
    } catch (Exception e) {
      strTmp = "";
    }
    return strTmp.trim();
  }

  /**
   * 배열의 null, 빈값을 공백으로 반환
   * since 2009. 4. 7.
   * @param str
   * @return
   */
  public static synchronized String[] checkNullString(String str[]) {
    String[] newStr = null;
    try {
      if ( str!=null && str.length>0 ) {
        newStr = new String[str.length];
        for(int i=0;i<str.length;i++){
          newStr[i] = checkNullString(str[i]);
        }
      }
    } catch (Exception e) {
      newStr = null;
    }
    return newStr;
  }

  /**
   * 갯수가 정해진 배열을 생성. 문자가 있으면 문자 없으면 공백으로 생성.
   * since 2009. 4. 7.
   * @param str   : split할 문자
   * @param count : 배열의 갯수
   * @param op    : 구분자
   * @return
   */
  public static synchronized String[] makeArray(String str, int count, String op) {
    String[] newStr = new String[count];
    String[] oldStr = null;
    try {
      
      oldStr = str.split("["+op+"]");
      for ( int i = 0; i < count; i++ ) {
        if ( oldStr != null && i < oldStr.length ) {
          newStr[i] = checkNullString(oldStr[i]); 
        } else {
          newStr[i] = "";
        }
      }
    } catch (Exception e) {
      newStr = new String[count];
      for ( int i = 0; i < count; i++ ) {
        newStr[i] = "";
      }
      oldStr = null;
    }
    return newStr;
  }
  /**
   * 갯수가 정해진 배열을 생성. 문자가 있으면 문자 없으면 공백으로 생성.
   * since 2009. 4. 7.
   * @param str   : split할 문자
   * @param count : 배열의 갯수
   * @param op    : 구분자
   * @return
   */
  public static synchronized String[] makeArray(String[] str, int count) {
    String[] newStr = new String[count];
    String[] oldStr = str;
    try {
      
      for ( int i = 0; i < count; i++ ) {
        if ( oldStr != null && i < oldStr.length ) {
          newStr[i] = checkNullString(oldStr[i]); 
        } else {
          newStr[i] = "";
        }
      }
    } catch (Exception e) {
      newStr = new String[count];
      for ( int i = 0; i < count; i++ ) {
        newStr[i] = "";
      }
      oldStr = null;
    }
    return newStr;
  }

  /**
  *  Function Name   : isNull
  *  Function Desc   : NULL 체크
  *  input parameter : argString
  *  Output value : NULL 여부 체크 - Boolean 반환
  *  Create Date  : 2004.08.10
  *  Author    : 김규혁
  *  Modification History :
  *  @param null, 공백인지 확인할 문자열
  *  @return 빈문자열이면  true 아니면 false
  */
  public static boolean isNull (String argString){
    if(argString==null || argString.length()==0 || argString.trim().length()==0) {
      return true;
    } else {
      return false;
    }
  }
  
  /**
   *  Function Name   : isNull
   *  Function Desc   : NULL 체크
   *  input parameter : argString
   *  Output value : NULL 여부 체크 - Boolean 반환
   *  Create Date  : 2004.08.10
   *  Author    : 김규혁
   *  Modification History :
   *  @param vector
   *  @return 빈벡터이면 true 아니면 false
   */
   public static boolean isNull (Vector vector){
     if( vector==null || vector.size()==0 ) {
       return true;
     } else {
       return false;
     }
   }
  
   /**
    * Hashtable Null 체크
    * @since 2010.01.06
    * @param hashtable 체크할 Hashtable
    * @return boolean 빈hashtable이면 true 아니면 false
    */
   public static boolean isNull(Hashtable hashtable)
   {
       if (hashtable == null || hashtable.size() == 0)
       {
           return true;
       } else
       {
           return false;
       }
   }
  
  /**
   * 첫번째 파라메터가 NULL또는 빈문자열일 경우 대체문자를 반환   
   * since 2009. 4. 7.
   * @param argString 원본문자열
   * @param alter NULL, 또는 빈값일경우 대체문자열
   * @return
   */
  public static synchronized String checkNullStringR ( Object argString, int alter ){
    try{
      return checkNullStringR ( argString, Integer.toString(alter) );
    }catch(Exception e){
      return checkNullStringR ( argString, "0" );
    }
  }
  
  /**
   * 첫번째 파라메터가 NULL또는 빈문자열일 경우 대체문자를 반환   
   * since 2009. 4. 7.
   * @param argString 원본문자열
   * @param alter NULL, 또는 빈값일경우 대체문자열
   * @return
   */
  public static synchronized String checkNullStringR ( Object argString, long alter ){
    try{
      return checkNullStringR ( argString, Long.toString(alter) );
    }catch(Exception e){
      return checkNullStringR ( argString, "0" );
    }
  }
  
  /**
   * 첫번째 파라메터가 NULL또는 빈문자열일 경우 대체문자를 반환   
   * since 2009. 4. 7.
   * @param argString 원본문자열
   * @param alter 빈값일경우 대체문자열
   * @return
   */
  public static synchronized String checkNullStringR ( Object argString, String argReturn ){
    if( argString == null ){
      return argReturn;
    }else{
      
      try{
        return checkNullStringR( argString.toString(), argReturn );
      }catch(Exception e){
        return "";
      }
    
    }
  }
  
  /**
   * 첫번째 파라메터가 NULL또는 빈문자열일 경우 대체문자를 반환   
   * since 2009. 4. 7.
   * @param argString 원본문자열
   * @param alter 빈값일경우 대체문자열
   * @return
   */
  public static synchronized String checkNullImageSize ( Object argString, int argSize ){
    if( argString == null ){
      return "";
    }else{
      
      try{
        return checkNullImageSize( argString.toString(), argSize );
      }catch(Exception e){
        return "";
      }
      
    }
  }
  
  /**
   * 첫번째 파라메터가 NULL또는 빈문자열일 경우 대체문자를 반환   
   * since 2009. 4. 7.
   * @param argString 원본문자열
   * @param alter 빈값일경우 대체문자열
   * @return null, 공백문자 처리된  파라메터값
   */
  public static synchronized String checkNullStringR (String argString, String argReturn){
    String strTmp = "";
    try {
      if(argString==null || argString.length()==0) {
        strTmp = argReturn;
      }else{
        strTmp = argString.trim();
      }
    } catch (Exception e) {
        strTmp = "";
    }
    return strTmp.trim();
  }
  
  /**
   * 첫번째 파라메터가 NULL또는 빈문자열일 경우 대체문자를 반환   
   * since 2009. 4. 7.
   * @param argString 원본문자열
   * @param alter 빈값일경우 대체문자열
   * @return null, 공백문자 처리된  파라메터값
   */
  public static synchronized String checkNullImageSize (String argString, int argSize){
    String strTmp = "";
    try {
      if(argString==null || argString.length()==0) {
        strTmp = "";
      }else{
        strTmp = argSize + "_" + argString.trim();
      }
    } catch (Exception e) {
      strTmp = "";
    }
    return strTmp.trim();
  }
  
  /**
   * DB에 내용입력시  null, 'null' 을 제외한 파라메터값에서  , ' 를 ''로 변경해서  sql injection 과 , 컨텐츠내용  짤림 예방
   * since 2009. 4. 7.
   * @param inputStr 입력문자열
   * @return '를 ''로 변경한 문자열
   */
  public static synchronized String convertDB(String inputStr) {    
    return convertDB(inputStr, false);
  }

  /**
   * DB에 내용입력시  null, 'null' 을 제외한 파라메터값에서  , ' 를 ''로 변경해서  sql injection 과 , 컨텐츠내용  짤림 예방
   * since 2009. 4. 7.
   * @param inputStr 입력문자열
   * @return '를 ''로 변경한 문자열
   */
  public static synchronized String convertDB(String inputStr, boolean isLike) {
    String str = null;
    if ( inputStr==null || inputStr.equals("null") ) {
      str = "null";
    } else {
      str = "'" + (isLike?"%":"") + replace(checkNullString(inputStr), "'", "''") + (isLike?"%":"") + "' ";
    }
    return str;
  }  
  
  /**
   * DB에 입력될 long형 파라메터를        닫아줌
   * since 2009. 4. 7.
   * @param input 입력될 long형  파라메터
   * @return String
   */
  public static synchronized String convertDB(long input) {
    return "'" + input + "'";
  }
  
  /**
   * DB에 입력될 int형 파라메터를        닫아줌
   * since 2009. 4. 7.
   * @param input 입력될 int형  파라메터
   * @return String
   */
  public static synchronized String convertDB(int input) {
    return "'" + input + "'";
  }
  
  /**
   * DB에 입력될 double형 파라메터를        닫아줌
   * since 2009. 4. 7.
   * @param input 입력될 double형  파라메터
   * @return String
   */
  public static synchronized String convertDB(double input) {
    return "'" + input + "'";
  }

  /**
   * 작성자 : 윤재현
   * 작성일 : 2008/04/24
   * 휴대폰, 지역번호 셀렉트박스 옵션생성
   * 사용법 :: 첫번째 파라메터에 체크될 값, 두번째 파라메터에 옵션타입 (M:휴대폰, !M:지역번호)
   * @param String 선택될 옵션값
   * @param String 집전화, 휴대전화번호 구분('M':휴대전화, 그외:집전화)
   * @return String 전화번호옵션값
   */
  public static synchronized String getSelectHtmlPhoneOptions(String checkValue, String mode){
    String[] numbers1 = {"선택", "010","011","016","017","018","019"}; //휴대폰번호
    String[] numbers2 = {"선택", "02","031","032","033","041","042","043","051","052","053","054","055","061","062","063","064","070"}; //지역번호
    String[] targetArray = null;
    if(mode.equals("M")){
      targetArray = numbers1;
    }else{
      targetArray = numbers2;
    }
    String options = "";
    StringBuffer sb = new StringBuffer();
    for(int i=0; i<targetArray.length; i++){
      sb.append("<option value=\"")
         .append(targetArray[i])
         .append("\" ");
      if(checkValue.equals(targetArray[i])){
        sb.append(" selected ");
      }
      sb.append(" >")
         .append(targetArray[i])
         .append("</option>"); 
    }
    options = sb.toString();
    sb.delete(0, sb.length());
    return options;
  }
  
  /**
   * 달력형식숫자앞에 0 추가
   * @param number
   * @return 2자리 숫자형 문자열 e.g ) 01, , 08, 11
   */
  public static synchronized String getDateFormat(String number){
    return addZeroFrontOfString(2, number);
  }

  /**
   * 달력형식숫자앞에 0 추가
   * @param number
   * @return 2자리 숫자형 문자열 e.g ) 01, , 08, 11
   */
  public static synchronized String getDateFormat(int number){
    return addZeroFrontOfString(2, ""+number);
  }
  
  /**
   * 길이체크 해주는 substring
   * @param str
   * @param start
   * @param end
   * @return
   */
  public static synchronized String substringCheckNull(Object obj, int start , int end){
    return substringCheckNull( (obj==null)?"":obj.toString(), start, end);
  }
  
  /**
   * 대상문자열의 길이체크 해서   substring
   * @param str 대상문자열
   * @param start substring 시작위치
   * @param end substring 종료위치
   * @return 
   */
  public static synchronized String substringCheckNull(String str, int start , int end){
    if(str!=null && !str.equals("")){
      if(!str.equals("") && str.length()< start){
        return "";
      }
      else if(!str.equals("") && str.length() >= end){
        return str.substring(start, end);
      }else {
        return str.substring(start, str.length());
      }
    }else{
      return "";
    }
  }

  /**
   * 대상문자열의 길이체크 해서   substring
   * @param str 대상문자열
   * @param start substring 시작위치
   * @param end substring 종료위치
   * @return 
   */
  public static synchronized String substringCheckNull(int nstr, int start , int end){
    String str = checkNullString(nstr);
    if(str!=null && !str.equals("")){
      if(!str.equals("") && str.length()< start){
        return "";
      }
      else if(!str.equals("") && str.length() >= end){
        return str.substring(start, end);
      }else {
        return str.substring(start, str.length());
      }
    }else{
      return "";
    }
  }
  
  /**
   * 랜덤한 문자열 추출 메소드
   * @param count : 길이
   * @param letters : 문자포함
   * @param numbers : 숫자포함
   */
  public static String getRandomString(int count, boolean letters, boolean numbers) {
    StringBuffer buffer = new StringBuffer();
    int start = 32;
    int end = 127;
    int gap = end - start;
    Random random = new Random();
    while (count-- != 0) {
        char ch;        
        ch = (char) (random.nextInt(gap) + start);        
        if ((letters && numbers && Character.isLetterOrDigit(ch))
        || (letters && Character.isLetter(ch))
        || (numbers && Character.isDigit(ch))
        || (!letters && !numbers)) {
            buffer.append(ch);
        } else {
            count++;
        }
    }
    return buffer.toString();
  }
  
  /**
   * 문쟈열 부분 변환 (src문자열을 len길이부터 ch로 변환)
   * @author skd
   * @since 2009. 9. 15.
   * @param src, ch, len
   * @return String
   */
  public static String addChar(String src, String ch, int len){
    String sReturn = "";
    if(src.length() <= len){
      sReturn = src;
    }else {
      for( int i = 0; i < src.length(); i++ ) {
        if ( i < len ) {
          sReturn += src.charAt(i);
        }else{
          sReturn += ch;
        }
      }      
    }
    return sReturn; 
  }
  
  /**
   * 숫자형식에 콤마찍기
   * @author chul
   * @since 2009. 4. 8.
   * @param src
   * @return String
   */
  public static String addComma(Object src){
    return new DecimalFormat(",###").format(convertToLong(src));
  }
  
  /**
   * 숫자형식에 콤마찍기
   * @author chul
   * @since 2009. 4. 8.
   * @param src
   * @return String
   */
  public static String addComma(String src){
    return new DecimalFormat(",###").format(convertToLong(src));
  }

  /**
   * 숫자형식에 콤마찍기
   * @author chul
   * @since 2009. 4. 8.
   * @param src
   * @return String
   */
  public static String addComma(int src){
    return new DecimalFormat(",###").format(src);
  }
  
  /**
   * 숫자형식에 콤마찍기
   * @author chul
   * @since 2009. 4. 8.
   * @param src
   * @return String
   */
  public static String addComma(long src){
    return new DecimalFormat(",###").format(src);
  }  
  
  /**
   * html Skin 복사
   * @author jekim
   * @since 2009. 4. 17.
   * @param sFileName
   * @param sTargetFileName
   * @return 
   */
  public static boolean copyFiles(String sFileName, String sTargetFileName) {
    boolean rtnValue = true;
    File fPath = new File(sFileName);
    File fTargetPath = new File(sTargetFileName);
    if ( !fTargetPath.exists() ) {
      fTargetPath.mkdirs();
    }    
    if ( fPath.exists() ) {
      for ( int i = 0; i < fPath.listFiles().length; i++ ) {        
        rtnValue = rtnValue & copyFile(fPath.listFiles()[i].getAbsolutePath(), sTargetFileName + "/" + fPath.listFiles()[i].getName());
      }
    }
    return rtnValue;
  }
  public static final String[] EMPTY_STRING_ARRAY = new String[0];
  
  /**
   * split
   * @author jekim
   * @since 2009. 4. 17.
   * @param sFileName
   * @param sTargetFileName
   * @return 
   */  
  public static String[] split(String str, String separatorChars) {
    return splitWorker(str, separatorChars, -1, false);
  }

  private static String[] splitWorker(String str, String separatorChars, int max, boolean preserveAllTokens) {
    // Performance tuned for 2.0 (JDK1.4)
    // Direct code is quicker than StringTokenizer.
    // Also, StringTokenizer uses isSpace() not isWhitespace()

    if (str == null) {
        return null;
    }
    int len = str.length();
    if (len == 0) {
        return EMPTY_STRING_ARRAY;
    }
    List list = new ArrayList();
    int sizePlus1 = 1;
    int i = 0, start = 0;
    boolean match = false;
    boolean lastMatch = false;
    if (separatorChars == null) {
        // Null separator means use whitespace
        while (i < len) {
            if (Character.isWhitespace(str.charAt(i))) {
                if (match || preserveAllTokens) {
                    lastMatch = true;
                    if (sizePlus1++ == max) {
                        i = len;
                        lastMatch = false;
                    }
                    list.add(str.substring(start, i));
                    match = false;
                }
                start = ++i;
                continue;
            } else {
                lastMatch = false;
            }
            match = true;
            i++;
        }
    } else if (separatorChars.length() == 1) {
        // Optimise 1 character case
        char sep = separatorChars.charAt(0);
        while (i < len) {
            if (str.charAt(i) == sep) {
                if (match || preserveAllTokens) {
                    lastMatch = true;
                    if (sizePlus1++ == max) {
                        i = len;
                        lastMatch = false;
                    }
                    list.add(str.substring(start, i));
                    match = false;
                }
                start = ++i;
                continue;
            } else {
                lastMatch = false;
            }
            match = true;
            i++;
        }
    } else {
        // standard case
        while (i < len) {
            if (separatorChars.indexOf(str.charAt(i)) >= 0) {
                if (match || preserveAllTokens) {
                    lastMatch = true;
                    if (sizePlus1++ == max) {
                        i = len;
                        lastMatch = false;
                    }
                    list.add(str.substring(start, i));
                    match = false;
                }
                start = ++i;
                continue;
            } else {
                lastMatch = false;
            }
            match = true;
            i++;
        }
    }
    if (match || (preserveAllTokens && lastMatch)) {
        list.add(str.substring(start, i));
    }
    return (String[]) list.toArray(new String[list.size()]);
  }
  
  /**
   * 파일 삭제
   * @author jekim
   * @since 2009. 4. 21.
   * @param sDirectory
   * @param sFileName
   * @return 
   */  
  /*
  public static synchronized void deleteFile(String sDirectory,String sFileName)
  {
    String strFilename = "";
    strFilename = sDirectory + System.getProperty("file.separator") + sFileName;
    File delFile = new File(strFilename.trim());
    if(delFile.exists()) delFile.delete();      
  }
  */
  
  
  /**
   * 파일 삭제
   * @author jekim
   * @since 2009. 4. 21.
   * @param sDirectory
   * @param sFileName
   * @return
   */
  public static synchronized void deleteFile(String sDirectory, String sFileName)
  {
    deleteFile( sDirectory, sFileName, true );
  }

  public static synchronized void deleteFile(String sDirectory, String sFileName, boolean isResize )
  {

    boolean isImageFile = false;

    if ( isResize && !sFileName.equals("") ) {
      String sExt = UtilBean.substringCheckNull(sFileName, sFileName.lastIndexOf("."), sFileName.length()).toLowerCase();
      if ( sExt.equals(".jpg") || sExt.equals(".jpeg") || sExt.equals(".gif") || sExt.equals(".bmp") || sExt.equals(".png") || sExt.equals(".tif") || sExt.equals(".tiff") ) {
        isImageFile = true;
      }
    }
    if ( !sDirectory.equals("") && !sFileName.equals("") && isImageFile ) { //경로, 파일명이 모두 있으며 이미지 파일인경우 썸네일도 삭제한다
      String strFilename = "";
      strFilename = sDirectory + System.getProperty("file.separator") + sFileName;
      File delFile = new File(strFilename.trim());
      if( delFile.exists() ) {
//        System.out.println("DELETE ORIGINAL : " + sDirectory+sFileName);
        delFile.delete();
      }
      File delFileLocation = new File(sDirectory);
      String sFile[] = delFileLocation.list();
      int nSize = sFile.length;
      if ( nSize > 0 ) {
        for ( int k = 0; k < nSize; k++ ) {
          if ( sFile[k].startsWith(sFileName+"_thumb") ) {
            File thumbFile = new File(sDirectory, sFile[k]);
//            System.out.println("DELETE THUMBNAIL : " + sDirectory+sFile[k]);
            thumbFile.delete();
          }
        }
      }
    } else {
      String strFilename = "";
      strFilename = sDirectory + System.getProperty("file.separator") + sFileName;
      File delFile = new File(strFilename.trim());
      if( delFile.exists() ) {
        delFile.delete();
      }
    }
  }

  /**
   * 파일 삭제
   * @author jekim
   * @since 2009. 4. 21.
   * @param sDirectory
   * @param sFileName
   * @return
   */
  public static synchronized void deleteFile(String sFileName)
  {
    String strFilename = "";
    strFilename = sFileName;
    File delFile = new File(strFilename.trim());
    if(delFile.exists()) delFile.delete();
  }
  
  
  /**
   * 배열을 받아서 argDelimiter 구분자로 된 문자열 반환
   * @author 황세원
   * @since 2004.12.10
   * @param String[] str
   * @param String argDelimiter
   * @return 
   */
  public static synchronized String arrayToString (String[] str, String argDelimiter) {
    String rString = "";
    if (str==null) return "";
    int cntArray = str.length;
    for (int i=0;i<cntArray;i++) {
      if ((i>0 && i<cntArray)) rString += argDelimiter;
      rString += str[i];
    }
    return rString;
  }
  public static synchronized String arrayToString (String[] str, String argDelimiter, String preDelimiter) {
    String rString = "";
    if (str==null) return "";
    int cntArray = str.length;
    for (int i=0;i<cntArray;i++) {
      rString += preDelimiter + str[i] + argDelimiter;
    }
    return rString;
  }
  
  //******************************************************************************
  //*
  //*   Function Name   : fncStringToArray
  //*
  //*   Function Desc   : 구분자가 있는 문자열을 받아서 argDelimiter 구분자하여 문자열 배열로 반환
  //*
  //*   input parameter : argString, argDelimiter
  //*
  //*   Output value : 문자열 배열 반환
  //*
  //*   Create Date : 2004.12.21
  //*
  //*   Author      : 김규혁
  //*
  //*   Modification History :
  //*
  //*******************************************************************************
  public static synchronized String[] stringToArray (String argString, String argDelimiter){
    String[] returnValue = null;
    int iCnt, i;
    StringTokenizer st = null;
    i = 0;
    if(checkNullString(argString).length() > 0) {
      // Delimeter로 Tokenize
      st = new StringTokenizer(argString, argDelimiter);
      iCnt = st.countTokens();
      returnValue = new String[iCnt];   // 크기만큼 문자열 배열 재 선언

      for(i=0; i<iCnt; i++) {           // 배열에 할당
        returnValue[i] = st.nextToken();
        if(returnValue[i]!=null) returnValue[i] = returnValue[i].trim();
      }
/*
      while (st.hasMoreTokens()) {
        println(st);
      }
*/
    }

    return returnValue;
  }
  public static synchronized ArrayList stringToArrayList (String argString, String argDelimiter){
    ArrayList returnValue = new ArrayList();
    int iCnt, i;
    StringTokenizer st = null;
    i = 0;
    if(checkNullString(argString).length() > 0) {
      // Delimeter로 Tokenize
      st = new StringTokenizer(argString, argDelimiter);
      iCnt = st.countTokens();
      
      for(i=0; i<iCnt; i++) {           // 배열에 할당
        returnValue.add(st.nextToken());
      }
    }
    
    return returnValue;
  }

  public static synchronized String dateFormat(String format) {
    return dateFormat(format, new Date());
  }

  public static synchronized String dateFormat(String format, Date date) {
    String returnStr = "";

    try {
      if ( format != null && date != null ) {
        returnStr = new SimpleDateFormat(format).format(date);
      }
    } catch (Exception e) {
      returnStr = "";
    }

    return returnStr;
  }
  /**
   * SQL Date Type NULL 체크
   *
   * @param  java.sql.Date  체크할 Date
   * @return String  NULL 여부 체크 - String 반환
   */
  public static synchronized String isNullDate (java.sql.Date argDate) {
    if (argDate != null) {
      return argDate.toString();
    } else {
      return "";
    }   
  }
  /**
   * Date Type NULL 체크
   *
   * @param  java.util.Date  체크할 Date
   * @return String  NULL 여부 체크 - String 반환
   */
  public static synchronized String isNullDate (java.util.Date argDate) {
    if (argDate != null) {
      return argDate.toString();
    } else {
      return "";
    }
  }
  
  
  /**
   * 엑셀 임폴트시 content변경으로 인한 Reverse
   * @since 2009. 5. 18.
   * @param htmlstr
   * @author 서경대
   * @return
   */   
  public static String RconvertHtmlchars(String htmlstr)
  {
    String convert = new String();
    convert = replace(htmlstr, "$$$", "<");
    convert = replace(convert, "@@", ">");
    return convert;
  }
  
  
  public static String VconvertHtmlchars(String htmlstr)
  {
    String convert = new String();
    convert = replace(htmlstr, "<", "$$$");
    convert = replace(convert, ">", "@@");
    return convert;
  }
    
  /**
   * MultipartRequest에서 사용
   * @since 2009. 5. 18.
   * @param inputStr
   * @return
   */  
  public static synchronized String convertCharMulti(String inputStr) {
    try {
      String newChar;

      if((inputStr==null) || (inputStr.length()==0)) {
        newChar = "";
      } else {
        /** resin **
        newChar = inputStr;
        /** tomcat **/
        newChar = new String(inputStr.getBytes("8859_1"),"UTF-8");
        /**/
      }
      return newChar.trim();
    } catch (Exception e) {
      return "";
    }
  }

  /*
   * 2009.07.08 코드 테이블 관련추가(확인필요함)
   * 
   */
  public static synchronized String fncIsNullString (String str){
    String strTmp;
    try {
      if (str!=null && str.length()>0 && !str.equals("")) {
        strTmp = str.trim();
        strTmp = UtilBean.replace(strTmp, " ", "");
      } else
        strTmp = "";
    } catch (Exception e) {
        strTmp = "";
    }
    return strTmp.trim();
  }
  
  /**
   * 작성자 : 조지은
   * 작성일 : 2009.07.22
   * 이메일 주소  셀렉트 생성
   * 사용법 :: 
   * @param String 선택될 옵션값
   */
  public static synchronized String getEmailAddress(String email){
    String sReturn = "";
    String[] aAddressValue = {""   , "Inpia.net", "incheon.go.kr", "naver.com", "empas.co.kr", "lycos.co.kr", "yahoo.co.kr", "daum.net", "paran.com"};
    String[] aAddressText  = {"직접입력", "Inpia.net", "incheon.go.kr", "naver.com", "empas.co.kr", "lycos.co.kr", "yahoo.co.kr", "daum.net", "paran.com"};
    for ( int i = 0; i < aAddressValue.length; i++ ) {
      sReturn += "<OPTION value='"+aAddressValue[i]+"'";
      if ( email != null && email.length() > 0 && aAddressValue[i].equals(email)) {
        sReturn += " selected";
      }
      sReturn += ">"+aAddressText[i]+"</option>";
    }
    return sReturn;
  }
  public static synchronized String dateFormatYMD(String inputStr, String maker) {
    String sRtn = "";

    if ( inputStr != null && inputStr.length() == 8 ) {
      sRtn = inputStr.substring(0,4) + maker + inputStr.substring(4, 6) + maker + inputStr.substring(6, 8);
    }
    return sRtn;
  }
  public static synchronized String dateFormatYMD(String inputStr) {
    String sRtn = "";

    if ( inputStr != null && inputStr.length() == 8 ) {
      sRtn = inputStr.substring(0,4) + "년 " + inputStr.substring(4, 6) + "월 " + inputStr.substring(6, 8) + "일";
    }
    return sRtn;
  }
  
  /**
   * 
   * @author 진성근
   * @since 2009. 7. 27.
   * @param rs
   * @param selectedValue
   * @return
   * @throws Exception
   */
  public static synchronized String getOptionQty(int qty){
    StringBuffer sb = new StringBuffer();
    for ( int i = 1; i <= qty; i++ ) {
      sb.append("<option value=\"").append(i).append("\" >")
        .append(i)
        .append("</option>\n");
    }
    return sb.toString();
  }
  
  /**
   * 
   * @author 진성근
   * @since 2009. 7. 27.
   * @param rs
   * @param selectedValue
   * @return
   * @throws Exception
   */
  public static synchronized String getOptionQty(int qty, int selected){
    StringBuffer sb = new StringBuffer();
    for ( int i = 1; i <= qty; i++ ) {
      sb.append("<option value=\"").append(i).append("\" ")
        .append( selected == i?"selected=\"selected\" >":">" )
        .append(i)
        .append("</option>\n");
      
    }
    return sb.toString();
  }
  
  

  /**
   * 현재 년도 가져온다.
   * @return String 현재년도
   */
  public static synchronized int getTodayYear(){
    java.util.Date df = new java.util.Date();
    return df.getYear() + 1900;
  }

  /**
   * 현재월 가져온다.
   * @return String 현재월
   */
  public static synchronized int getTodayMonth(){
    java.util.Date df = new java.util.Date();
    return df.getMonth() + 1;
  }



  /**
   * null이 아닌 모든 parameter 값을 가져온다.
   * @return String 파라미터
   */
  public static synchronized String getRequestParamters(HttpServletRequest request){
	  Enumeration enuParameter = request.getParameterNames();
	  String sElement = "";
	  String sParams = "";
	  
	  while(enuParameter.hasMoreElements()){
		  sElement = (String)enuParameter.nextElement();
		  if( !checkNullString(request.getParameter(sElement)).equals("") ){
		  	if( !sElement.equals("currentPage")){
		  		sParams += sElement+"="+UtilBean.encodeURL(checkNullString(request.getParameter(sElement)), "utf-8")+"&";	
		  	}
		  }		  
	  }
	  
	  if( sParams.length() > 0){
		  sParams = UtilBean.substringCheckNull(sParams, 0, sParams.length()-1);
	  }else{
		  sParams = "empty=";
	  }

    return sParams;
  }
  
  /**
   * write,modify,detail,process페이지의 search parameter 값을 가져온다. (post방식)
   * @return String 파라미터
   */
  public static synchronized String getSearchParamPost(HttpServletRequest request){
    Enumeration enuParameter = request.getParameterNames();
    String sElement = "";
    String sElementParam = "";
    String sParams = "";
    
    while(enuParameter.hasMoreElements()){
      sElement = (String)enuParameter.nextElement();
      if( !sElement.equals("") && sElement.length() > 2 ){
        if(sElement.substring(0, 2).equals("s_")){
          sParams += "<input type=\"hidden\" name=\""+sElement+"\" id=\""+sElement+"\" value=\""+UtilBean.encodeURL(checkNullString(request.getParameter(sElement)), "utf-8")+"\" />\n"; 
        }
      }		  
    }
    return sParams;
  }
  /**
   * write,modify,detail,process페이지의 search parameter 값을 가져온다. (get방식)
   * @return String 파라미터
   */
  public static synchronized String getSearchParamGet(HttpServletRequest request){
    Enumeration enuParameter = request.getParameterNames();
    String sElement = "";
    String sParams = "";
    
    while(enuParameter.hasMoreElements()){
      sElement = (String)enuParameter.nextElement();
      if( !sElement.equals("") && sElement.length() > 2 ){
        if(sElement.substring(0, 2).equals("s_") || sElement.equals("currentPage")){
          sParams += sElement+"="+UtilBean.encodeURL(checkNullString(request.getParameter(sElement)), "utf-8")+"&";
        }
      }		  
    }
    if( sParams.length() > 0){
      sParams = UtilBean.substringCheckNull(sParams, 0, sParams.length()-1);
    }
    return sParams;
  }
  /**
   * list페이지의 search parameter 값을 가져온다. (get방식)
   * @return String 파라미터
   */
  public static synchronized String getSearchParamList(HttpServletRequest request){
    Enumeration enuParameter = request.getParameterNames();
    String sElement = "";
    String sParams = "";
    
    while(enuParameter.hasMoreElements()){
      sElement = (String)enuParameter.nextElement();
      if( !sElement.equals("") && sElement.length() > 2 ){
        if(sElement.substring(0, 2).equals("s_")){
          sParams += sElement+"="+UtilBean.encodeURL(checkNullString(request.getParameter(sElement)), "utf-8")+"&";
        }
      }		  
    }
    if( sParams.length() > 0){
      sParams = UtilBean.substringCheckNull(sParams, 0, sParams.length()-1);
    }
    return sParams;
  }
  
  /** 특정문자 빼기
  *
  *  @param sValue 처리값
  *  @param separatorChars   구분자 
  */
   public static String convertSplit( String sValue, String separatorChars ) throws Exception{
     String sSplit[] = null;
     String sResult = "";
     
     try {
       sSplit = split(sValue, separatorChars);
       
       for ( int i = 0 ; i < sSplit.length ; i++ ){
         sResult += sSplit[i]; 
       }
     } catch(Exception e) {
        throw new Exception("wrong format string");
     }

       return sResult;
   }
  
   /**
    * 배열에 특정 문자가 포함되어있는지 검사
   * @author 정연호
    * @since 2012. 08. 15
    * @param arr   : 배열
    * @param str    : 검사할문자
    * @return
    */
   public static synchronized boolean checkStrToArray(String[] arr, String str) {
  	 boolean bResult = false;
     try {
       if( arr != null ){
      	 for ( int i = 0; i < arr.length ; i++ ) {
      		 if( checkNullString(str).equals(arr[i]) ){
      			 bResult = true;
      			 break;
      		 }
      	 }
       }
     } catch (Exception e) {
    	 e.printStackTrace();
     }
     return bResult;
   }
   
   /**
    * 리스트에 특정 문자가 포함되어있는지 검사
   * @author 정연호
    * @since 2013. 05. 13
    * @param arr   : 배열
    * @param str    : 검사할문자
    * @return
    */
   public static synchronized boolean checkStrToArray(List arr, String str) {
     boolean bResult = false;
     try {
       if( arr != null ){
         for ( int i = 0; i < arr.size() ; i++ ) {
           if( checkNullString(str).equals(arr.get(i)) ){
             bResult = true;
             break;
           }
         }
       }
     } catch (Exception e) {
       e.printStackTrace();
     }
     return bResult;
   }
   
   /**
   * 쿠키값 가져오기
   * @author 정연호
   * @since 2012.09.28
   * @param request
   * @param name
   * @return
   */
  public static synchronized String getCookie(HttpServletRequest request, String name) {
     String sReturnValue = "";
     Cookie[] cookies = null;
     if(request!=null) {
       cookies = request.getCookies();
     }
     String cName = "";
     String cValue = "";
     if(cookies!=null) {
       for(int i=0;i<cookies.length;i++) {
         cName = UtilBean.checkNullString(cookies[i].getName());
         cValue = UtilBean.checkNullString(cookies[i].getValue());
         if(name.equals(cName)) {
           sReturnValue = cValue;
           break;
         }
       }
     }
     return sReturnValue;
   }
   
   /**
   * 쿠키 셋팅
   * @author 정연호
   * @since 2012.09.28
   * @param response
   * @param cName
   * @param cValue
   * @param cPath
   * @param cDomain
   * @param cMaxAge
   */
  public static synchronized void setCookie(HttpServletResponse response, String cName, String cValue, String cPath, String cDomain, int cMaxAge) {
     Cookie cookie = new Cookie(cName, cValue);

     cookie.setPath(cPath);
     cookie.setDomain(cDomain);
     cookie.setMaxAge(cMaxAge);
     response.addCookie(cookie);
   }
   
   /**
    * 파라메터로  URL을 넘길경우  ? 와 & 를  @와 $로 치환해준다.
    * @author 정연호
    * @since 2012.09.28
    * @param url
    */
   public static String encodeParmUrl(String url){
     String retUrl = "";
     retUrl = UtilBean.replace(url, "?", "@");
     retUrl = UtilBean.replace(retUrl, "&amp;", "&");
     retUrl = UtilBean.replace(retUrl, "&", "$");
     return retUrl;
   }

   /**
    * 파라메터로  URL을 받을 경우  @와 $를 ? 와 & 로 치환해준다.
    * @author 정연호
    * @since 2012.09.28
    * @param url
    */
   public static String decodeParmUrl(String url){
     String retUrl = "";
     retUrl = UtilBean.replace(url, "@", "?");
     retUrl = UtilBean.replace(retUrl, "$", "&");
     return retUrl;
   }
   
  /**
   * 시간 - 시, 분, 초를 옵션으로 가져온다.
   * @author 정연호
   * @since 2012.09.28
   * @param checkValue
   * @return
   */
  public static synchronized String getTimeHHMMSSOption(int maxTime, String checkValue){
     String options = "";
     StringBuffer buffer = new StringBuffer();
     for(int i=0; i<maxTime; i++){
       buffer.append("<option value=\"");
       buffer.append(addZeroFrontOfString(2, checkNullString(i)));
       buffer.append("\" ");
       if(checkValue.equals(addZeroFrontOfString(2, checkNullString(i)))){
         buffer.append(" selected=\"selected\" ");
       }
       buffer.append(" >");
       buffer.append(addZeroFrontOfString(2, checkNullString(i)));
       buffer.append("</option>"); 
     }
     options = buffer.toString();
     buffer.delete(0, buffer.length());
     return options;
   }
  
  /**
   * 이메일 구분 체크
   * 웹메일 - W , 모바일 메일- M
   * since 2009. 4. 7.
   * @param str 원본문자열
   * @return String 공백문자열 또는,  원본문자열
   */
  public static synchronized String checkEmail(String str){
    
    String strTmp = "W";
    String aTmp[] = split(str, "@");
    
    try {
      
      if ( aTmp[1].equals("docomo.ne.jp") ||
          aTmp[1].equals("ezweb.ne.jp") ||
          aTmp[1].equals("softbank.ne.jp") ||
          aTmp[1].equals("i.softbank.jp") ||
          aTmp[1].equals("disney.ne.jp") ||
          aTmp[1].equals("vodafone.ne.jp") ||
          aTmp[1].equals("t.vodafone.ne.jp") ||
          aTmp[1].equals("d.vodafone.ne.jp") ||
          aTmp[1].equals("h.vodafone.ne.jp") ||
          aTmp[1].equals("c.vodafone.ne.jp") ||
          aTmp[1].equals("k.vodafone.ne.jp") ||
          aTmp[1].equals("r.vodafone.ne.jp") ||
          aTmp[1].equals("n.vodafone.ne.jp") ||
          aTmp[1].equals("s.vodafone.ne.jp") ||
          aTmp[1].equals("q.vodafone.ne.jp") ||
          aTmp[1].equals("pdx.ne.jp") ||
          aTmp[1].equals("docomo-camera.ne.jp") ||
          aTmp[1].equals("mopera.net") ||
          aTmp[1].equals("biz.ezweb.ne.jp") ||
          aTmp[1].equals("ido.ne.jp") ||
          aTmp[1].equals("emnet.ne.jp") ||
          aTmp[1].equals("emobile.ne.jp") ||
          aTmp[1].equals("willcom.com")
         ) {
        strTmp = "M";
      }
      
    } catch (Exception e) {
        strTmp = "";
    }
    return strTmp.trim();
  }
  
 
  
  
  /**
   * 업로드된파일의 확장자를 체크하고, 업로드할수없는 파일일경우 삭제
   * @author 정석호
   * @since 2009. 4. 14.
   * @param sVaildExtend 업로드 할수있는 확장자( '|' 로구분)
   * @param sFileName 체크할파일명
   * @param sPath 체크할 파일의절대경로
   * @return sMessage 업로드 할수없는  FileName을 리턴
   */
  public String checkUploadFile(String sValidExtend, String sPath, String sFileName) {
    int iExtendCount = 0;
    String sMessage = "";
    String sFileNameExtend = sFileName.substring(sFileName.lastIndexOf(".")+1).toLowerCase();
    String aVaildExtend[] = sValidExtend.replace(".","").split("\\|");
    if ( !UtilBean.isNull(sValidExtend) && !UtilBean.isNull(sFileNameExtend) ) {
      for ( int i = 0; i < aVaildExtend.length; i++ ) {
        if ( sFileNameExtend.equals(aVaildExtend[i]) ) {
          iExtendCount++;
          break;
        }
      }
      if ( iExtendCount == 0 ) {
        File fDeleteFile = new File(sPath+"/"+sFileName);
        fDeleteFile.delete();
        sMessage = sFileName;
      }
    }
    return sMessage;
  }

  
  
  /**
   * 지역번호,이메일등 select의 옵션값을 불러온다.
   * @author  이호우 
   * @since   2012. 10. 26.
   * @param   div           옵션값으로 받을 구분값(email, tel ,phone, tp)
   * @param   name          맨위에 보여질 옵션기본값
   * @param   selected      옵션의 selected할 값
   * @return  String        콤보상자 옵션 리스트
   */
  public static synchronized String getSelectOptionDivValue(String div,String name,String selected) {
   String sReturn = "";   
   selected = checkNullString(selected); 
   name = UtilBean.checkNullStringR(name,"선택");
   StringBuffer buffer = new StringBuffer();   
   
  
   
   //* 이메일
   if(div.equals("email")){    
     List    listE       =  new ArrayList();
             listE.add(0,name);
             listE.add(1,"naver.com");
             listE.add(2,"gmail.com");
             listE.add(3,"nate.com");
             listE.add(4,"hanmail.net");
             listE.add(5,"yahoo.co.kr");
             listE.add(6,"paran.com");   
     
              buffer.append("<option value='1'>직접입력</option>");           
          for(int i=1;i<listE.size();i++){
              buffer.append("<option value='")
                    .append(listE.get(i))
                    .append("'");            
            if(listE.get(i).equals(selected)){
              buffer.append(" selected='selected'");
            }            
              buffer.append(">")
                    .append(listE.get(i))
                    .append("</option>");
          }
             
             
   //* 지역번호 
   }else if(div.equals("tel")){
     List    listT       =  new ArrayList();
             listT.add(0,name);
             listT.add(1,"02");
             listT.add(2,"031");
             listT.add(3,"032");
             listT.add(4,"033");
             listT.add(5,"041");
             listT.add(6,"042");
             listT.add(7,"043");
             listT.add(8,"051");
             listT.add(9,"052");
             listT.add(10,"053");
             listT.add(11,"054");
             listT.add(12,"055");
             listT.add(13,"061");
             listT.add(14,"062");
             listT.add(15,"063");
             listT.add(16,"064");
             listT.add(17,"070");
     
           buffer.append("<option value=''>"+name+"</option>");
         for(int i=1;i<listT.size();i++){
           buffer.append("<option value='")
                 .append(listT.get(i))
                 .append("'");         
         if(listT.get(i).equals(selected)){
           buffer.append(" selected='selected'");
         }         
           buffer.append(">")
                 .append(listT.get(i))
                 .append("</option>");
        }     
   
   
   //* 휴대폰앞번호 
  }else if(div.equals("phone")){
   
    List    listP       =  new ArrayList();
            listP.add(0,name);
            listP.add(1,"010");
            listP.add(2,"011");
            listP.add(3,"016");
            listP.add(4,"017");
            listP.add(5,"019");
            
          buffer.append("<option value=''>"+name+"</option>");
        for(int i=1;i<listP.size();i++){
          buffer.append("<option value='")
                .append(listP.get(i))
                .append("'");   
        if(listP.get(i).equals(selected)){
          buffer.append(" selected='selected'");
        }         
          buffer.append(">")
                .append(listP.get(i))
                .append("</option>");
       }     
  

   //* 통합 
  }else if(div.equals("tp")){
    List    listS       =  new ArrayList();
            listS.add(0,name);
            listS.add(1,"010");
            listS.add(2,"011");
            listS.add(3,"016");
            listS.add(4,"017");
            listS.add(5,"019");
            listS.add(6,"02");
            listS.add(7,"031");
            listS.add(8,"032");
            listS.add(9,"033");
            listS.add(10,"041");
            listS.add(11,"042");
            listS.add(12,"043");
            listS.add(13,"051");
            listS.add(14,"052");
            listS.add(15,"053");
            listS.add(16,"054");
            listS.add(17,"055");
            listS.add(18,"061");
            listS.add(19,"062");
            listS.add(20,"063");
            listS.add(21,"064");
            listS.add(22,"070");
            
          buffer.append("<option value=''>"+name+"</option>");
        for(int i=1;i<listS.size();i++){
          buffer.append("<option value='")
                .append(listS.get(i))
                .append("'");         
        if(listS.get(i).equals(selected)){
          buffer.append(" selected");
        }         
          buffer.append(">")
                .append(listS.get(i))
                .append("</option>");
       }     
  }
   sReturn = buffer.toString();
   buffer.delete(0, buffer.length());
   return sReturn;
  }
  
  
  //******************************************************************************
  //*
  //*  Function Name   : fncIsNullDate
  //*
  //*  Function Desc   : Date Type NULL 체크
  //*
  //*  input parameter : argString, format
  //*
  //*  Output value : NULL 여부 체크 - String 반환
  //*
  //*  Create Date  : 2004.08.10
  //*
  //*  Author    : 김규혁
  //*
  //*  Modification History :
  //*
  //*******************************************************************************
  public static synchronized String fncIsNullDate (java.util.Date argDate, String format){
    if(argDate != null) {
      return new SimpleDateFormat(format).format(argDate);
    } else {
      return "";
    }
  }
  /**
   * Adds a number of months to a date returning a new object.
   * The original date object is unchanged.
   *
   * @param date  the date, not null
   * @param amount  the amount to add, may be negative
   * @return the new date object with the amount added
   * @throws IllegalArgumentException if the date is null
   */
  public static Date addMonths(Date date, int amount) {
      return add(date, Calendar.MONTH, amount);
  }
  
  /**
   * Adds to a date returning a new object.
   * The original date object is unchanged.
   *
   * @param date  the date, not null
   * @param calendarField  the calendar field to add to
   * @param amount  the amount to add, may be negative
   * @return the new date object with the amount added
   * @throws IllegalArgumentException if the date is null
   */
  public static Date add(Date date, int calendarField, int amount) {
      if (date == null) {
          throw new IllegalArgumentException("The date must not be null");
      }
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      c.add(calendarField, amount);
      return c.getTime();
  }
  
  
  
  /**
   * 제품의 등록일(최초노출일)을 기준으로 신제품여부 판단
   * @author 우혜정
   * @since 2013. 2. 22.
   * @param sVaildExtend 업로드 할수있는 확장자( '|' 로구분)
   */
  public static String checkNewProduct(String sDate) {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    String sSignDate  = checkNullString(UtilBean.getTodayDateFormat(("yyyy-MM-dd")));       //현재날짜
    String sMessage = "";

    try {
      String sRegDt = "";          //최초노출일
      String sRegDt2 = "";         //신제품기준판정날짜
  
      Calendar cal = Calendar.getInstance();
      
      sRegDt = UtilBean.substringCheckNull(sDate, 0, 10);
      
      if(!sDate.equals("")){   
        cal.setTime(format.parse(sRegDt+" 00:00:00"));
        
        cal.add(cal.MONTH, 2); 
        
        sRegDt2 = format.format(cal.getTime());
        
        if(sRegDt2.compareTo(sSignDate) <= 0){       
          sMessage = "N";
        }else if(sRegDt2.compareTo(sSignDate) > 0){      //신제품
          sMessage = "Y";
        }
      }else{
        sMessage = "N";
      }
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
    return sMessage;
  }
  
  public static boolean isInteger(String str){
    boolean bInteger = false;
    try {
      Pattern pInteger = Pattern.compile("[\\d]*");
      Matcher matchesInteger = pInteger.matcher(str);
      bInteger = matchesInteger.matches();
    } catch ( Exception e ) {
      e.printStackTrace();
      bInteger = false;
    }
    return bInteger;
  }
  
  
  
  /**
   * 상품 복사등록시 이미지 중복체크
   * @author 우혜정
   * @since 2013. 3. 18.
   * @param 체크할 파일경로
   * @param 체크할 파일명
   */
  public static String checkCopyFile(String sFliePath, String sFileNm) {
    int a=0;
    String sYn = "N";  
    
    String[] aImg = sFileNm.split("\\.");
    String imgNm = "";
    
    try {
      while(sYn.equals("N")){      
        imgNm = aImg[0]+ Integer.toString(a) +"."+aImg[1];       
        
        File file = new File(sFliePath, imgNm);
        if(!file.exists()) {
//          System.out.println("imgFirst==");

          sYn = "Y";  
        }else{
          
//          System.out.println("img==");

          a = a+1;              
          sYn = "N"; 
        }
      }   
    } catch (Exception e) {
      e.printStackTrace();
    }
    
    return imgNm;
  }
  
  
  /**
   * DB에 내용입력시 ''로 변경해서 넘김(여러 개의 값이 들어올때)
   * @author 우혜정
   * @since 2013. 3. 24.
   * @param 체크할 텍스트
   */
  public static String convertDbMulti(String sSearchText) {
    String[] aSearch = null;
    String sText = "";
    
    try {      
      aSearch = sSearchText.split(",");
      
      for(int i=0;i<aSearch.length;i++){
        sText += "'"+aSearch[i].trim()+"'"+",";
      }
      
      sText = sText.substring(0, sText.length()-1);       
      
    } catch (Exception e) {
      e.printStackTrace();
    }    
    return sText;
  }

  public static String getDomain(String requestUrl) {
    String sReturn = "";
    
    try {      
      if(requestUrl.indexOf("vhmall.kr")>-1) {
        sReturn = "www.vhmall.kr";
      }else if(requestUrl.indexOf("vhmall.net")>-1) {
        sReturn = "www.vhmall.net";
      }else if(requestUrl.indexOf("vhmall.co.kr")>-1) {
        sReturn = "www.vhmall.co.kr";
      }else{
        sReturn = "127.0.0.1";
      }  
      
    } catch (Exception e) {
      e.printStackTrace();
    }    
    return sReturn;
  }
  
  /**
   * table alias 제거
   */
  public static String getRemoveAlias( String strFiled ) {
    String sReturn  = "";
    String aStrFiled[] = null;
    
    try {
      strFiled  = strFiled.toUpperCase();
      aStrFiled = split(strFiled, ".");

      for ( int i = 0 ; i < aStrFiled.length ; i++ ) {
        sReturn += aStrFiled[i];
        sReturn = substringCheckNull(sReturn, 0, sReturn.length()-1);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }    
    return replace(sReturn, "A0", "a0") ;
  }
  
  /**
   * table alias 추가
   */
  public static String getAddAlias( String strFiled, String strAlias ) {
    String sReturn  = "";
    String aStrFiled[] = null;
    
    try {
      strFiled  = strFiled.toUpperCase();
      aStrFiled = split(strFiled, ".");
      
      for ( int i = 0 ; i < aStrFiled.length ; i++ ) {
        sReturn += aStrFiled[i];
        sReturn = substringCheckNull(sReturn, 0, sReturn.length()-1) + strAlias + ".";
      }
      
      sReturn = substringCheckNull(sReturn, 0, sReturn.length()-2);
    } catch (Exception e) {
      e.printStackTrace();
    }     
    return sReturn;
  }
  /**
   * micro sec를 구하여 넘겨준다.
   * @return microSec
   */
  public static long getMicroSec(){
    long microSec = System.nanoTime()/10000000;
    return microSec;
   }
   
  /**
   * 유일키를 만들어 넘겨준다. 보통 식별키로 사용하기위함.
   * @return lkey;
   */
  public static String setKey(){
    Long lkey;
    String skey = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
    Long nanoSec = getMicroSec();
    
    skey += nanoSec;
    //lkey = Long.parseLong(skey);
    
    return skey;
  }
}